import { CSSObject } from "styled-components";
import { InputHTMLAttributes, LabelHTMLAttributes } from "react";
import { Dimension } from "@components/common/types";

/**
 * @typedef {Object} ICheckboxRadio - Интерфейс со свойствами для Checkbox и Radio.
 * @property {string} coloration - Цвет Checkbox и Radio.
 * @property {string} hint - Всплывающая подсказка Checkbox и Radio.
 * @property {string} dimension - Размер Checkbox и Radio.
 * @property {boolean} inlineStyle - Дополнительный пользовательский стиль Checkbox и Radio.
 * @property {boolean} disabled - Флаг отключения Checkbox и Radio.
 * @property {string} label - Заголовок Checkbox и Radio.
 * @property {boolean} indeterminate -  Флаг, указывающий, находится ли Checkbox в неопределенном состоянии.
 */

export interface ICheckboxRadio {
    coloration?: string;
    hint?: string;
    dimension?: Dimension;
    inlineStyle?: CSSObject;
    disabled?: boolean;
    label?: string;
    indeterminate?: boolean;
}

/**
 * @typedef {Object} ICheckboxRadioProps - Тип для компонентов Checkbox и Radio.
 */
export type TCheckboxRadioProps = ICheckboxRadio & Omit<InputHTMLAttributes<HTMLInputElement>, "type">;

/**
 * @typedef {Object} TStyledCheckboxRadio - Тип для стилизованного компонента StyledCheckboxRadio.
 */
export type TStyledCheckboxRadio = InputHTMLAttributes<HTMLInputElement> & Omit<TCheckboxRadioProps, 'label'>;

/**
 * @typedef {Object} TStyledLabel - Интерфейс для стилизованного компонента StyledLabel,
 *  являющегося меткой компонента Checkbox.
 */
export type TStyledLabel = LabelHTMLAttributes<HTMLLabelElement> & Pick<ICheckboxRadio, 'label' | 'inlineStyle'>;